//package com.frameworkset.util;
//
//import org.frameworkset.cache.FileContentCache;
//import org.frameworkset.util.io.ClassPathResource;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.io.*;
//import java.net.URL;
//import java.net.URLDecoder;
//import java.util.*;
//import java.util.zip.*;
//
//public class FileUtil
//{
//    private static Logger log = LoggerFactory.getLogger(FileContentCache.class);
//    private static final ListResourceBundle mimeTypes = new FileMIMETypes();
//    public static String apppath;
//    private static final int EOF = -1;
//
//    public static String getMimeType(String fileExt)
//    {
//        try
//        {
//            return mimeTypes.getString(fileExt); } catch (Exception e) {
//        }
//        return "";
//    }
//
//    public static String getMimeTypeByleName(String fileName)
//    {
//        try
//        {
//            String fileExt = getFileExtByFileName(fileName);
//            return mimeTypes.getString(fileExt); } catch (Exception e) {
//        }
//        return "";
//    }
//
//    public static final String getOS()
//    {
//        return System.getProperty("os.name");
//    }
//
//    public static final boolean isWindows()
//    {
//        return getOS().startsWith("Windows");
//    }
//
//    public static final boolean isLinux()
//    {
//        return getOS().startsWith("Linux");
//    }
//
//    private static File computeApplicationDir(URL location, File defaultDir) {
//        if (location == null)
//        {
//            System.out.println("1.Warning: Cannot locate the program directory. Assuming default.");
//            return defaultDir;
//        }
//        System.out.println("location.getProtocol()...."+location.getProtocol());
//        if (!("file".equalsIgnoreCase(location.getProtocol())))
//        {
//            System.out.println("2.Warning: Unrecognized location type. Assuming default.");
//            return new File(".");
//        }
//        String file = location.getFile();
//        if ((!(file.endsWith(".jar"))) && (!(file.endsWith(".zip"))))
//        {
//            try
//            {
//                return new File(URLDecoder.decode(location.getFile(), "UTF-8")).getParentFile().getParentFile();
//            }
//            catch (UnsupportedEncodingException localUnsupportedEncodingException1)
//            {
//                System.out.println("3.Warning: Unrecognized location type. Assuming default.");
//                return new File(location.getFile());
//            }
//
//        }
//
//        try
//        {
//            File path = null;
//            if (!(isLinux()))
//            {
//                path = new File(URLDecoder.decode(location.toExternalForm().substring(6), "UTF-8")).getParentFile().getParentFile();
//            }
//            else
//            {
//                System.out.println("location.toExternalForm().substring(9).........."+location.toExternalForm().substring(9));
//                path = new File(URLDecoder.decode(location.toExternalForm().substring(9), "UTF-8")).getParentFile().getParentFile();
//            }
//
//            return path;
//        }
//        catch (UnsupportedEncodingException e)
//        {
//            e.printStackTrace();
//
//            System.out.println("4.Warning: Unrecognized location type. Assuming default."); }
//        return new File(location.getFile());
//    }
//
//    public static StringBuffer read(String file)
//            throws Exception
//    {
//        BufferedReader in = null;
//        StringBuffer sb = new StringBuffer();
//        String s = null;
//        StringBuffer stringbuffer;
//        try
//        {
//            in = new BufferedReader(new FileReader(file));
//            while ((s = in.readLine()) != null)
//                sb.append(s).append('\n');
//            stringbuffer = sb;
//        }
//        finally
//        {
//            if (in != null)
//                in.close();
//        }
//        return stringbuffer;
//    }
//
//    public static Properties getProperties(String propsFile)
//            throws Exception
//    {
//        return getProperties(propsFile, false);
//    }
//
//    public static Properties getProperties(String propsFile, boolean addToSystemProps)
//            throws Exception
//    {
//        FileInputStream fis = null;
//        Properties props = null;
//        try
//        {
//            fis = new FileInputStream(propsFile);
//            props = new Properties();
//            props.load(fis);
//            fis.close();
//        }
//        finally
//        {
//            if (fis != null)
//                fis.close();
//        }
//        return props;
//    }
//
//    public static File createNewFile(String filePath)
//    {
//        File file = new File(filePath);
//        if (file.exists())
//            return file;
//        File dir = file.getParentFile();
//        if (!(dir.exists()))
//            dir.mkdirs();
//        try
//        {
//            file.createNewFile();
//            return file;
//        }
//        catch (IOException e)
//        {
//            e.printStackTrace();
//        }
//        return file;
//    }
//
//    public static File createNewFileOnExist(String filePath)
//    {
//        File file = new File(filePath);
//        if (file.exists())
//            file.delete();
//        File dir = file.getParentFile();
//        if (!(dir.exists()))
//            dir.mkdirs();
//        try
//        {
//            file.createNewFile();
//            return file;
//        }
//        catch (IOException e)
//        {
//            e.printStackTrace();
//        }
//        return file;
//    }
//
//    public static File createNewDirectory(String directorPath)
//    {
//        File dir = new File(directorPath);
//        if (dir.exists())
//            return dir;
//        dir.mkdirs();
//        return dir;
//    }
//
//    public static void copy(File sourceFile, String destinction)
//            throws IOException
//    {
//        if (!(sourceFile.exists()))
//            return;
//        File dest_f = new File(destinction);
//        if (!(dest_f.exists())) {
//            dest_f.mkdirs();
//        }
//        if (sourceFile.isDirectory())
//        {
//            File[] files = sourceFile.listFiles();
//            for (int i = 0; (files != null) && (i < files.length); ++i)
//            {
//                File temp = files[i];
//                if (temp.isDirectory())
//                {
//                    String fileName = temp.getName();
//                    copy(temp, destinction + "/" + fileName);
//                }
//                else
//                {
//                    fileCopy(temp.getAbsolutePath(), destinction + "/" + temp.getName());
//                }
//            }
//
//        }
//        else
//        {
//            File destinctionFile = new File(destinction);
//            if (!(destinctionFile.exists()))
//            {
//                destinctionFile.mkdirs();
//            }
//            String dest = destinction + "/" + sourceFile.getName();
//            fileCopy(sourceFile, dest);
//        }
//    }
//
//    public static void copy(String source, String destinction)
//            throws IOException
//    {
//        File sourceFile = new File(source);
//        copy(sourceFile, destinction);
//    }
//
//    public static void makeFile(String destinctionFile)
//    {
//        File f = new File(destinctionFile);
//        File pf = f.getParentFile();
//        if (f.exists())
//            return;
//        if (!(pf.exists()))
//        {
//            pf.mkdirs();
//        }
//
//        try
//        {
//            f.createNewFile();
//        }
//        catch (IOException e)
//        {
//            e.printStackTrace();
//        }
//    }
//
//    public static void fileCopy(String sourcefile, String destinctionFile)
//            throws IOException
//    {
//        fileCopy(new File(sourcefile), destinctionFile);
//    }
//
//    public static void fileCopy(File sourcefile, String destinctionFile)
//            throws IOException
//    {
//        FileInputStream stFileInputStream = null;
//
//        FileOutputStream stFileOutputStream = null;
//        try
//        {
//            makeFile(destinctionFile);
//
//            stFileInputStream = new FileInputStream(sourcefile);
//
//            stFileOutputStream = new FileOutputStream(destinctionFile);
//
//            int arraySize = 1024;
//            byte[] buffer = new byte[arraySize];
//
//            int bytesRead;
//            while ((bytesRead = stFileInputStream.read(buffer)) != -1)
//            {
//
//                stFileOutputStream.write(buffer, 0, bytesRead);
//            }
//
//        }
//        catch (Exception e)
//        {
//            e.printStackTrace();
//        }
//        finally
//        {
//            if (stFileInputStream != null)
//                try
//                {
//                    stFileInputStream.close();
//                }
//                catch (IOException e)
//                {
//                    e.printStackTrace();
//                }
//            if (stFileOutputStream != null)
//                try
//                {
//                    stFileOutputStream.close();
//                }
//                catch (IOException e)
//                {
//                    e.printStackTrace();
//                }
//        }
//    }
//
//    public static void fileCopy(File sourcefile, File destinctionFile)
//            throws IOException
//    {
//        FileInputStream stFileInputStream = null;
//
//        FileOutputStream stFileOutputStream = null;
//        try
//        {
//            stFileInputStream = new FileInputStream(sourcefile);
//
//            stFileOutputStream = new FileOutputStream(destinctionFile);
//
//            int arraySize = 1024;
//            byte[] buffer = new byte[arraySize];
//            int bytesRead;
//
//            while ((bytesRead = stFileInputStream.read(buffer)) != -1)
//            {
//                stFileOutputStream.write(buffer, 0, bytesRead);
//            }
//
//        }
//        catch (Exception e)
//        {
//            e.printStackTrace();
//        }
//        finally
//        {
//            if (stFileInputStream != null)
//                try
//                {
//                    stFileInputStream.close();
//                }
//                catch (IOException e)
//                {
//                    e.printStackTrace();
//                }
//            if (stFileOutputStream != null)
//                try
//                {
//                    stFileOutputStream.close();
//                }
//                catch (IOException e)
//                {
//                    e.printStackTrace();
//                }
//        }
//    }
//
//    public static String getFileContent(String filePath, String charSet)
//            throws IOException
//    {
//        return getFileContent(new File(filePath), charSet);
//    }
//
//    public static String getFileContent(File file, String charSet) throws IOException
//    {
//        ByteArrayOutputStream swriter = null;
//        OutputStream temp = null;
//        InputStream reader = null;
//        byte[] buffer;
//        try
//        {
//            reader = new FileInputStream(file);
//            swriter = new ByteArrayOutputStream();
//            temp = new BufferedOutputStream(swriter);
//
//            int len = 0;
//            buffer = new byte[1024];
//            while ((len = reader.read(buffer)) > 0)
//            {
//                temp.write(buffer, 0, len);
//            }
//            temp.flush();
//            String str;
//            if ((charSet != null) && (!(charSet.equals("")))) {
//                str = swriter.toString(charSet);
//                return str;
//            }
//            return swriter.toString();
//        }
//        catch (FileNotFoundException e)
//        {
//            log.error("Get File Content Error:", e);
//            return "";
//        }
//        catch (IOException e)
//        {
//        }
//        finally
//        {
//            if (reader != null)
//                try
//                {
//                    reader.close();
//                }
//                catch (IOException localIOException10)
//                {
//                }
//            if (swriter != null)
//                try
//                {
//                    swriter.close();
//                }
//                catch (IOException localIOException11)
//                {
//                }
//            if (temp != null)
//                try
//                {
//                    temp.close();
//                }
//                catch (IOException localIOException12)
//                {
//                }
//        }
//        return null;
//    }
//
//    public static String getFileContent(InputStream reader, String charSet)
//            throws IOException
//    {
//        ByteArrayOutputStream swriter = null;
//        OutputStream temp = null;
//        byte[] buffer;
//        try
//        {
//            swriter = new ByteArrayOutputStream();
//            temp = new BufferedOutputStream(swriter);
//
//            int len = 0;
//            buffer = new byte[1024];
//            while ((len = reader.read(buffer)) > 0)
//            {
//                temp.write(buffer, 0, len);
//            }
//            temp.flush();
//            String str;
//            if ((charSet != null) && (!(charSet.equals("")))) {
//                str = swriter.toString(charSet);
//                return str;
//            }
//            return swriter.toString();
//        }
//        catch (FileNotFoundException e)
//        {
//            log.error("Get File Content Error:", e);
//            return "";
//        }
//        catch (IOException e)
//        {
//        }
//        finally
//        {
//            if (reader != null)
//                try
//                {
//                    reader.close();
//                }
//                catch (IOException localIOException10)
//                {
//                }
//            if (swriter != null)
//                try
//                {
//                    swriter.close();
//                }
//                catch (IOException localIOException11)
//                {
//                }
//            if (temp != null)
//                try
//                {
//                    temp.close();
//                }
//                catch (IOException localIOException12)
//                {
//                }
//        }
//        return null;
//    }
//
//    public static String getContent(String file, String charSet)
//            throws IOException
//    {
//        InputStream input = null;
//        String content = null;
//        if (!(file.startsWith("file:")))
//        {
//            ClassPathResource resource = new ClassPathResource(file);
//            input = resource.getInputStream();
//            content = getFileContent(input, charSet);
//        }
//        else
//        {
//            content = getFileContent(file.substring(5), charSet);
//        }
//
//        return content;
//    }
//
//    public static void main(String[] args)
//    {
//        try
//        {
//            System.out.println(getFileContent("D:\\workspace\\bbossgroup-2.0-RC2\\bboss-mvc/WebRoot/jsp/databind/table.jsp", "UTF-8"));
//        }
//        catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public Vector getFileNames(String pathName, String suffix)
//            throws Exception
//    {
//        Vector v = new Vector();
//        String[] fileNames = null;
//
//        File file = new File(pathName);
//
//        fileNames = file.list();
//        if (fileNames == null) {
//            throw new Exception();
//        }
//        for (int i = 0; i < fileNames.length; ++i)
//        {
//            if ((suffix.equals("*")) || (fileNames[i].toLowerCase().endsWith(suffix.toLowerCase()))) {
//                v.addElement(fileNames[i]);
//            }
//        }
//        return v;
//    }
//
//    public static void deleteFile(String path)
//    {
//        deleteFile(new File(path));
//    }
//
//    public static void deleteFile(File file)
//    {
//        if ((!(file.exists())) || (file.isFile()))
//            return;
//        if (file.isDirectory()) {
//            deleteSubfiles(file.getAbsolutePath());
//        }
//        file.delete();
//    }
//
//    public static void removeFileOrDirectory(String path)
//    {
//        removeFileOrDirectory(new File(path));
//    }
//
//    public static void removeFileOrDirectory(File file)
//    {
//        if (!(file.exists()))
//            return;
//        if (file.isDirectory()) {
//            deleteSubfiles(file.getAbsolutePath());
//        }
//        file.delete();
//    }
//
//    public static void deleteFileOnly(String path)
//    {
//        File file = new File(path);
//        if ((!(file.exists())) || (!(file.isFile())))
//            return;
//        file.delete();
//    }
//
//    public static void moveFile(String sourceFileName, String destPath)
//            throws Exception
//    {
//        File src = new File(sourceFileName);
//
//        if (!(src.exists()))
//        {
//            throw new Exception("save file[" + sourceFileName + "] to file[" + destPath + "] failed:" + sourceFileName + " not exist.");
//        }
//
//        try
//        {
//            fileCopy(sourceFileName, destPath);
//        }
//        catch (Exception e)
//        {
//            System.out.println("save file[" + sourceFileName + "] to file[" + destPath + "]" + e.getMessage());
//            e.printStackTrace();
//        }
//    }
//
//    public static void renameFile(String source, String dest)
//    {
//        File file = new File(source);
//        file.renameTo(new File(dest));
//    }
//
//    public static void renameFile(File source, File dest)
//    {
//        source.renameTo(dest);
//    }
//
//    public static void bakFile(String source, String dest)
//            throws IOException
//    {
//        File file = new File(source);
//        boolean state = file.renameTo(new File(dest));
//        if (state)
//            return;
//        fileCopy(source, dest);
//
//        deleteFileOnly(source);
//    }
//
//    public static void moveSubFiles(String sourceFileName, String destPath)
//    {
//        File src = new File(sourceFileName);
//        File dest = new File(destPath);
//        if (!(dest.exists()))
//            dest.mkdirs();
//        if (src.isFile()) {
//            return;
//        }
//
//        File[] files = src.listFiles();
//        String destFile = null;
//        label190: for (int i = 0; (files != null) && (i < files.length); ++i)
//        {
//            if (files[i].isDirectory())
//            {
//                String temp_name = files[i].getName();
//                try
//                {
//                    moveSubFiles(files[i].getAbsolutePath(), destPath + "/" + temp_name);
//                }
//                catch (Exception e)
//                {
//                    e.printStackTrace();
//                    break label190;
//                }
//
//            }
//            else
//            {
//                destFile = destPath + "/" + files[i].getName();
//                try
//                {
//                    moveFile(files[i].getAbsolutePath(), destFile);
//                }
//                catch (Exception e)
//                {
//                    e.printStackTrace();
//                }
//            }
//        }
//    }
//
//    public static List upzip(ZipInputStream zip, String destPath)
//            throws ZipException, IOException
//    {
//        List fileNames = new ArrayList();
//        ZipEntry azipfile = null;
//        while ((azipfile = zip.getNextEntry()) != null)
//        {
//            String name = azipfile.getName();
//            fileNames.add(name);
//            if (!(azipfile.isDirectory()))
//            {
//                File targetFile = new File(destPath, name);
//                targetFile.getParentFile().mkdirs();
//                if (targetFile.exists())
//                {
//                    targetFile.delete();
//                }
//                targetFile.createNewFile();
//                BufferedOutputStream diskfile = null;
//                FileOutputStream out = null;
//                try
//                {
//                    out = new FileOutputStream(targetFile);
//                    diskfile = new BufferedOutputStream(out);
//                    byte[] buffer = new byte[1024];
//                    int read;
//                    while ((read = zip.read(buffer)) != -1)
//                    {
//
//                        diskfile.write(buffer, 0, read);
//                    }
//                    diskfile.flush();
//                }
//                catch (Exception e)
//                {
//                    e.printStackTrace();
//                }
//                finally
//                {
//                    try {
//                        if (out != null)
//                            out.close();
//                    }
//                    catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                    try {
//                        if (diskfile != null)
//                            diskfile.close();
//                    }
//                    catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                }
//            }
//        }
//        return fileNames;
//    }
//
//    public static void unzip(String sourceFileName, String destPath)
//            throws ZipException, IOException
//    {
//        ZipFile zf = null;
//        try
//        {
//            zf = new ZipFile(sourceFileName);
//            Enumeration en = zf.entries();
//
//            while (en.hasMoreElements())
//            {
//                ZipEntry zipEnt = (ZipEntry)en.nextElement();
//                saveEntry(destPath, zipEnt, zf);
//            }
//
//        }
//        finally
//        {
//            if (zf != null)
//                zf.close();
//        }
//    }
//
//    public static void saveEntry(String destPath, ZipEntry target, ZipFile zf)
//            throws ZipException, IOException
//    {
//        InputStream is = null;
//        BufferedInputStream bis = null;
//        FileOutputStream fos = null;
//        BufferedOutputStream bos = null;
//        try
//        {
//            File file = new File(destPath + "/" + target.getName());
//            if (target.isDirectory())
//            {
//                file.mkdirs();
//            }
//            else
//            {
//                is = zf.getInputStream(target);
//                bis = new BufferedInputStream(is);
//                File dir = new File(file.getParent());
//                dir.mkdirs();
//                fos = new FileOutputStream(file);
//                bos = new BufferedOutputStream(fos);
//                int c;
//                while ((c = bis.read()) != -1)
//                {
//
//                    bos.write((byte)c);
//                }
//                bos.flush();
//            }
//
//        }
//        catch (ZipException e)
//        {
//        }
//        catch (IOException e)
//        {
//        }
//        finally
//        {
//            try
//            {
//                if (bis != null)
//                    bis.close();
//            }
//            catch (Exception e) {
//                e.printStackTrace();
//            }
//            try {
//                if (is != null)
//                    is.close();
//            }
//            catch (Exception e) {
//                e.printStackTrace();
//            }
//            try {
//                if (bos != null)
//                    bos.close();
//            }
//            catch (Exception e) {
//                e.printStackTrace();
//            }
//            try {
//                if (fos != null)
//                    fos.close();
//            }
//            catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//    public static boolean createDir(String dirName)
//    {
//        File file = new File(dirName);
//        if (!(file.exists()))
//            return file.mkdir();
//        return true;
//    }
//
//    public static void createFile(String fileName)
//            throws IOException
//    {
//        File file = new File(fileName);
//
//        if ((file.exists()) ||
//                (file.createNewFile())) return;
//        throw new IOException("Create file fail!");
//    }
//
//    public static void writeFile(String fileName, String text)
//            throws IOException
//    {
//        FileWriter fw = new FileWriter(fileName, true);
//        try
//        {
//            fw.write(text, 0, text.length());
//        }
//        catch (IOException ioe)
//        {
//        }
//        finally
//        {
//            fw.close();
//        }
//    }
//
//    public static void writeFile(String fileName, String text, String encode)
//            throws IOException
//    {
//        writeFile(new File(fileName), text, encode);
//    }
//
//    public static void writeFile(File file, String text, String encode)
//            throws IOException
//    {
//        Writer fw = null;
//        OutputStream out = null;
//        try
//        {
//            out = new FileOutputStream(file);
//            fw = new BufferedWriter(new OutputStreamWriter(out, (encode == null) ? "UTF-8" : encode));
//
//            fw.write(text, 0, text.length());
//            fw.flush();
//        }
//        catch (IOException ioe)
//        {
//        }
//        finally
//        {
//            try
//            {
//                out.close();
//            }
//            catch (Exception localException2) {
//            }
//            try {
//                fw.close();
//            }
//            catch (Exception localException3)
//            {
//            }
//        }
//    }
//
//    public static void writeFile(String fileName, String text, boolean isAppend)
//            throws IOException
//    {
//        FileWriter fw = new FileWriter(fileName, isAppend);
//        try
//        {
//            fw.write(text, 0, text.length());
//        }
//        catch (IOException ioe)
//        {
//        }
//        finally
//        {
//            fw.close();
//        }
//    }
//
//    public static void deleteSubfiles(String publishTemppath)
//    {
//        File file = new File(publishTemppath);
//        if ((!(file.exists())) || (file.isFile()))
//            return;
//        File[] files = file.listFiles();
//        for (int i = 0; (files != null) && (i < files.length); ++i)
//        {
//            File temp = files[i];
//            if (temp.isDirectory())
//            {
//                deleteSubfiles(temp.getAbsolutePath());
//            }
//            temp.delete();
//        }
//    }
//
//    public static String getFileExtByFileName(String fileName)
//    {
//        if (fileName == null) {
//            return "";
//        }
//
//        int idx = fileName.lastIndexOf(".");
//        if (idx != -1)
//            return fileName.substring(idx + 1);
//        return "";
//    }
//
//    public static String getFileContent(String filePath) throws IOException
//    {
//        Writer swriter = null;
//        Reader reader = null;
//        char[] buffer;
//        try
//        {
//            reader = new FileReader(filePath);
//
//            swriter = new StringWriter();
//
//            int len = 0;
//            buffer = new char[1024];
//            while ((len = reader.read(buffer)) != -1)
//            {
//                swriter.write(buffer, 0, len);
//            }
//            return swriter.toString();
//        }
//        catch (FileNotFoundException e)
//        {
//            e.printStackTrace();
//            return "";
//        }
//        catch (IOException e)
//        {
//        }
//        finally
//        {
//            if (reader != null)
//                try
//                {
//                    reader.close();
//                }
//                catch (IOException localIOException5)
//                {
//                }
//            if (swriter != null)
//                try
//                {
//                    swriter.close();
//                }
//                catch (IOException localIOException6)
//                {
//                }
//        }
//        return  null;
//    }
//
//    public static boolean hasSubDirectory(String path, String uri)
//    {
//        File file = null;
//        if ((uri == null) || (uri.trim().length() == 0))
//        {
//            file = new File(path);
//        }
//        else
//        {
//            file = new File(path, uri);
//        }
//
//        if ((!(file.exists())) || (file.isFile()))
//            return false;
//        File[] subFiles = file.listFiles(new FileFilter()
//        {
//            public boolean accept(File pathname)
//            {
//                return (pathname.isDirectory());
//            }
//        });
//        return (subFiles.length > 0);
//    }
//
//    public static boolean hasSubDirectory(String path)
//    {
//        return hasSubDirectory(path, null);
//    }
//
//    public static boolean hasSubFiles(String path, String uri)
//    {
//        File file = new File(path, uri);
//        if ((!(file.exists())) || (file.isFile()))
//            return false;
//        File[] subFiles = file.listFiles(new FileFilter()
//        {
//            public boolean accept(File pathname)
//            {
//                return (!(pathname.isDirectory()));
//            }
//        });
//        return (subFiles.length > 0);
//    }
//
//    public static boolean hasSubFiles(String path)
//    {
//        File file = new File(path);
//        if ((!(file.exists())) || (file.isFile()))
//            return false;
//        File[] subFiles = file.listFiles(new FileFilter()
//        {
//            public boolean accept(File pathname)
//            {
//                return (!(pathname.isDirectory()));
//            }
//        });
//        return (subFiles.length > 0);
//    }
//
//    public static File[] getSubDirectories(String parentpath, String uri)
//    {
//        File file = null;
//        if ((uri == null) || (uri.trim().length() == 0))
//        {
//            file = new File(parentpath);
//        }
//        else
//        {
//            file = new File(parentpath, uri);
//        }
//        if ((!(file.exists())) || (file.isFile()))
//            return null;
//        File[] subFiles = file.listFiles(new FileFilter()
//        {
//            public boolean accept(File pathname)
//            {
//                return (pathname.isDirectory());
//            }
//        });
//        return subFiles;
//    }
//
//    public static File[] getSubDirectories(String parentpath)
//    {
//        return getSubDirectories(parentpath, null);
//    }
//
//    public static File[] getSubFiles(String parentpath)
//    {
//        return getSubFiles(parentpath, (String)null);
//    }
//
//    public static File[] getSubFiles(String parentpath, String uri)
//    {
//        File file = null;
//        if ((uri == null) || (uri.trim().length() == 0))
//        {
//            file = new File(parentpath);
//        }
//        else
//        {
//            file = new File(parentpath, uri);
//        }
//        if ((!(file.exists())) || (file.isFile()))
//            return null;
//        File[] subFiles = file.listFiles(new FileFilter()
//        {
//            public boolean accept(File pathname)
//            {
//                return (pathname.isFile());
//            }
//        });
//        return subFiles;
//    }
//
//    public static File[] getSubFiles(String parentpath, FileFilter fileFilter)
//    {
//        return getSubFiles(parentpath, null, fileFilter);
//    }
//
//    public static File[] getSubFiles(String parentpath, String uri, FileFilter fileFilter)
//    {
//        File file = null;
//        if ((uri == null) || (uri.trim().length() == 0))
//        {
//            file = new File(parentpath);
//        }
//        else
//        {
//            file = new File(parentpath, uri);
//        }
//        if ((!(file.exists())) || (file.isFile())) {
//            return null;
//        }
//        File[] files = null;
//        if (fileFilter != null)
//        {
//            files = file.listFiles(fileFilter);
//        }
//        else
//        {
//            files = file.listFiles();
//        }
//
//        int rLen = 0;
//        for (int i = 0; (files != null) && (i < files.length); ++i)
//        {
//            if (!(files[i].isFile()))
//                continue;
//            files[rLen] = files[i];
//            ++rLen;
//        }
//
//        File[] r = new File[rLen];
//        System.arraycopy(files, 0, r, 0, rLen);
//        return r;
//    }
//
//    public static File[] getSubDirectorieAndFiles(String parentpath)
//    {
//        return getSubDirectorieAndFiles(parentpath, null, null);
//    }
//
//    public static File[] getSubDirectorieAndFiles(String parentpath, String uri)
//    {
//        return getSubDirectorieAndFiles(parentpath, uri, null);
//    }
//
//    public static File[] getSubDirectorieAndFiles(String parentpath, FileFilter fileFilter)
//    {
//        return getSubDirectorieAndFiles(parentpath, null, fileFilter);
//    }
//
//    public static File[] getSubDirectorieAndFiles(String parentpath, String uri, FileFilter fileFilter)
//    {
//        File file = null;
//        if ((uri == null) || (uri.trim().length() == 0))
//        {
//            file = new File(parentpath);
//        }
//        else
//        {
//            file = new File(parentpath, uri);
//        }
//        if ((!(file.exists())) || (file.isFile()))
//            return null;
//        if (fileFilter != null)
//        {
//            return file.listFiles(fileFilter);
//        }
//
//        return file.listFiles();
//    }
//
//    public static String getFileContent(File file)
//    {
//        Writer swriter = null;
//        Reader reader = null;
//        char[] buffer;
//        try {
//            reader = new FileReader(file);
//            swriter = new StringWriter();
//
//            int len = 0;
//            buffer = new char[1024];
//            while ((len = reader.read(buffer)) > 0)
//            {
//                swriter.write(buffer, 0, len);
//            }
//            swriter.flush();
//            return swriter.toString();
//        }
//        catch (FileNotFoundException e)
//        {
//            e.printStackTrace();
//            return "";
//        }
//        catch (IOException e)
//        {
//            e.printStackTrace();
//            return "";
//        }
//        finally
//        {
//            if (reader != null)
//                try
//                {
//                    reader.close();
//                }
//                catch (IOException localIOException7)
//                {
//                }
//            if (swriter != null)
//                try
//                {
//                    swriter.close();
//                }
//                catch (IOException localIOException8)
//                {
//                }
//        }
//    }
//
//    public static byte[] readFully(InputStream in)
//            throws IOException
//    {
//        if (in instanceof ByteArrayInputStream)
//        {
//            int size = in.available();
//            byte[] bytes = new byte[size];
//
//            int offset = 0;
//            int numRead = 0;
//            while (offset < size)
//            {
//                numRead = in.read(bytes, offset, size - offset);
//                if (numRead < 0)
//                    break;
//                offset += numRead;
//            }
//
//            return bytes;
//        }
//
//        byte[] xfer = new byte[2048];
//
//        ByteArrayOutputStream out = new ByteArrayOutputStream(xfer.length);
//
//        for (int bytesRead = in.read(xfer, 0, xfer.length); bytesRead >= 0; bytesRead = in.read(xfer, 0, xfer.length))
//        {
//            if (bytesRead <= 0)
//                continue;
//            out.write(xfer, 0, bytesRead);
//        }
//
//        in.close();
//        out.close();
//        return out.toByteArray();
//    }
//
//    private static void zipFile(File source, String basePath, ZipOutputStream zos)
//            throws IOException
//    {
//        File[] files = null;
//        if (source.isDirectory()) {
//            files = source.listFiles();
//        } else {
//            files = new File[1];
//            files[0] = source;
//        }
//
//        byte[] buf = new byte[1024];
//        int length = 0;
//
//        for (File file : files)
//        {
//            String pathName;
//            if (file.isDirectory()) {
//                pathName = file.getPath().substring(basePath.length() + 1) + "/";
//                zos.putNextEntry(new ZipEntry(pathName));
//                zipFile(file, basePath, zos);
//            } else {
//                pathName = file.getPath().substring(basePath.length() + 1);
//
//                BufferedInputStream bis = null;
//                InputStream is = null;
//                try
//                {
//                    is = new FileInputStream(file);
//                    bis = new BufferedInputStream(is);
//                    zos.putNextEntry(new ZipEntry(pathName));
//                    while ((length = bis.read(buf)) > 0) {
//                        zos.write(buf, 0, length);
//                    }
//                }
//                finally
//                {
//                    if (is != null) {
//                        try {
//                            is.close();
//                        }
//                        catch (Exception e) {
//                            e.printStackTrace();
//                        }
//                    }
//                    if (bis != null)
//                        try {
//                            bis.close();
//                        }
//                        catch (Exception e) {
//                            e.printStackTrace();
//                        }
//                }
//            }
//        }
//    }
//
//    public static File zip(File f, File destfile)
//    {
//        BufferedOutputStream out = null;
//        ZipOutputStream zipOut = null;
//        File localFile;
//        try {
//            out = new BufferedOutputStream(new FileOutputStream(destfile));
//
//            zipOut = new ZipOutputStream(out);
//            String basePath;
//            if (f.isDirectory())
//                basePath = f.getPath();
//            else {
//                basePath = f.getParent();
//            }
//            zipFile(f, basePath, zipOut);
//
//            return destfile;
//        }
//        catch (IOException e)
//        {
//            return null;
//        }
//        finally
//        {
//            if (zipOut != null) {
//                try {
//                    zipOut.close();
//                }
//                catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (out != null)
//                try {
//                    out.close();
//                }
//                catch (IOException e) {
//                    e.printStackTrace();
//                }
//        }
//    }
//
//    public static File zip(File f, String destfile) { BufferedOutputStream out = null;
//        ZipOutputStream zipOut = null;
//        String basePath;
//        try {
//            File ret = new File(destfile);
//            out = new BufferedOutputStream(new FileOutputStream(ret));
//
//            zipOut = new ZipOutputStream(out);
//
//            if (f.isDirectory())
//                basePath = f.getPath();
//            else {
//                basePath = f.getParent();
//            }
//            zipFile(f, basePath, zipOut);
//
//            return ret;
//        }
//        catch (IOException e)
//        {
//            return null;
//        }
//        finally
//        {
//            if (zipOut != null) {
//                try {
//                    zipOut.close();
//                }
//                catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (out != null)
//                try {
//                    out.close();
//                }
//                catch (IOException e) {
//                    e.printStackTrace();
//                }
//        }
//    }
//
//    static
//    {
//        try
//        {
//            URL location = FileUtil.class.getProtectionDomain().getCodeSource().getLocation();
//            System.out.println("location............."+location);
//            File appDir = computeApplicationDir(location, new File("."));
//            System.out.println("appDir.............."+appDir);
//            if ((appDir != null) && (appDir.exists())) {
//                System.out.println("appDir.getParentFile().getPath().............."+appDir.getParentFile().getPath());
//                apppath = appDir.getParentFile().getPath();
//            }
//        }
//        catch (Throwable e)
//        {
//            log.warn("Init apppath failed:", e);
//        }
//    }
//}
